package com.shixun.milktea.filter;

import com.baomidou.mybatisplus.extension.api.R;
import com.shixun.milktea.enums.ResultStatusEnum;
import com.shixun.milktea.utils.JwtUtil;
import com.shixun.milktea.utils.RedisUtil;
import com.shixun.milktea.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Zourongsheng
 * @version 1.0
 * @date 2022/6/9 20:33
 */
//正式上线再添加token，传给前端
//@Component
//public class UriFilter extends OncePerRequestFilter {
//    @Autowired
//    private JwtUtil jwtUtil;
//    @Autowired
//    private RedisUtil redisUtil;
//    @Override
//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
//        /*
//        *拦截url，如果url是login，直接放行，否则拦截token   ||uri.contains("swagger") ||uri.contains("csrf")
//         */
//        String uri = request.getRequestURI();
//        if (uri.indexOf("/login")==0||uri.contains("swagger")||uri.contains("webjars")||uri.contains("v2")){
//            filterChain.doFilter(request,response);
//        }else {
//            /**
//             * 从请求头获取token，如果token没有过期且真实
//             *  从缓存中读取用户身份写到上下文中
//             *  生成新的token并缓存token
//             *  将token添加到响应头，响应给客户端
//             *  请请求转发给控制器
//             * 否则，将拒绝访问
//             */
//            boolean access = true;//允许访问
//            //从请求头中获取token
//            String accessToken =request.getHeader("token");
//            //如果token没有过期
//            if (!jwtUtil.isExpires(accessToken)){
//                //从token中获取用户ID
//                String username = jwtUtil.getUserName(accessToken);
//                //从缓存中读取token
//                String validityToken = redisUtil.getToken(username);
//                //如果token真实
//                if (jwtUtil.validityToken(accessToken,validityToken)){
//                    //生成token
//                    String token = jwtUtil.generateToken(username);
//                    System.out.println(token);
//                    //保存到redis
//                    redisUtil.save(username,token);
//                    //从redis中读取用户身份，并将用户身份写入上下文
//                    Authentication authentication = redisUtil.getAuthentication(username);
//                    SecurityContextHolder.getContext().setAuthentication(authentication);
//                    //添加token到响应头
//                    response.setHeader("token",token);
//                    //验证通过，转发请求
//                    filterChain.doFilter(request,response);
//                }else {
//                    //拒绝访问
//                    access = false;
//                }
//            }else {
//                //拒绝访问
//                access = false;
//            }
//            //拒绝访问响应
//            if(!access){
//                ResultVO resultVO = new ResultVO(ResultStatusEnum.USER_NOT_LOGIN);
//                resultVO.out(response);
//            }
//        }
//    }
//}
